BI.TextValueComboPopup = BI.inherit(BI.Pane, {
    _defaultConfig: function () {
        return BI.extend(BI.TextValueComboPopup.superclass._defaultConfig.apply(this, arguments), {
            baseCls: "bi-text-icon-popup",
            chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE
        });
    },

    render () {
        var o = this.options, self = this;
        if (o.chooseType !== BI.ButtonGroup.CHOOSE_TYPE_MULTI) {
            return {
                type: "bi.vertical",
                vgap: 5,
                items: [{
                    type: "bi.button_group",
                    ref: (_ref) => {
                        this.popup = _ref;
                    },
                    items: this._formatItems(o.items),
                    chooseType: o.chooseType,
                    layouts: [{
                        type: "bi.vertical"
                    }],
                    value: o.value,
                    listeners: [{
                        eventName: BI.Controller.EVENT_CHANGE,
                        action: function (type, val, obj) {
                            self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
                            if (type === BI.Events.CLICK) {
                                self.fireEvent(BI.TextValueComboPopup.EVENT_CHANGE, val, obj);
                            }
                        }
                    }]
                }]
            };
        }
        return {
            type: "bi.vertical",
            verticalAlign: BI.VerticalAlign.Stretch,
            rowSize: ["fill", ""],
            items: [{
                type: "bi.select_list",
                logic: {
                    dynamic: true,
                    innerVgap: 5,
                    rowSize: ["", "fill"],
                    verticalAlign: BI.VerticalAlign.Stretch
                },
                ref: (_ref) => {
                    this.popup = _ref;
                },
                el: {
                    el: {
                        chooseType: o.chooseType
                    }
                },
                items: this._formatItems(o.items),
                value: {
                    type: BI.ButtonGroup.CHOOSE_TYPE_MULTI,
                    value: o.value
                },
                listeners: [{
                    eventName: BI.SelectList.EVENT_CHANGE,
                    action: function (val) {
                        self.fireEvent(BI.TextValueComboPopup.EVENT_CHANGE, val);
                    }
                }]
            }, {
                type: "bi.center",
                cls: "list-view-toolbar bi-high-light bi-split-top",
                height: 24,
                items: BI.createItems([{
                    type: "bi.text_button",
                    text: BI.i18nText("BI-Basic_Clears"),
                    handler: function () {
                        self.fireEvent(BI.TextValueComboPopup.EVENT_CLEAR);
                    }
                }, {
                    type: "bi.text_button",
                    text: BI.i18nText("BI-Basic_OK"),
                    handler: function () {
                        self.fireEvent(BI.TextValueComboPopup.EVENT_CONFIRM);
                    }
                }], {
                    once: false,
                    shadow: true,
                    isShadowShowingOnSelected: true
                })
            }]
        };
    },

    mounted: function () {
        this.check();
    },

    _formatItems: function (items) {
        var o = this.options;
        return BI.map(items, function (i, item) {
            return BI.extend({
                type: o.chooseType !== BI.ButtonGroup.CHOOSE_TYPE_MULTI ? "bi.single_select_item" : "bi.multi_select_item",
                iconWrapperWidth: 36,
                textAlign: o.textAlign,
                title: item.title || item.text
            }, item);
        });
    },

    populate: function (items) {
        BI.TextValueComboPopup.superclass.populate.apply(this, arguments);
        this.popup.populate(this._formatItems(items));
    },

    getValue: function () {
        if (this.options.chooseType !== BI.ButtonGroup.CHOOSE_TYPE_MULTI) {
            return this.popup.getValue();
        }
        var val = this.popup.getValue();
        if (val.type === BI.ButtonGroup.CHOOSE_TYPE_MULTI) {
            return val.value;
        } else {
            return val.assist;
        }
    },

    setValue: function (v) {
        if (this.options.chooseType !== BI.ButtonGroup.CHOOSE_TYPE_MULTI) {
            return this.popup.setValue(v);
        }
        this.popup.setValue({
            type: BI.ButtonGroup.CHOOSE_TYPE_MULTI,
            value: v
        });
    }

});
BI.TextValueComboPopup.EVENT_CHANGE = "EVENT_CHANGE";
BI.TextValueComboPopup.EVENT_CLEAR = "EVENT_CLEAR";
BI.TextValueComboPopup.EVENT_CONFIRM = "EVENT_CONFIRM";
BI.shortcut("bi.text_value_combo_popup", BI.TextValueComboPopup);
